package com.study.csc.think;

/**
 * @author csc
 * @Date 2023/10/20 15:58
 * @PackageName:com.study.csc.a10threadsafe2
 * @ClassName: MyRunnable
 * @Description: TODO
 * @Version 1.0
 */
public class MyRunnable implements Runnable{

    //这里为什么不用加上static？
    /*
      .是因为这里的MyRunnable实现的是Runnable接口，是作为参数的只创建一次
        而继承Thread类是创建三次所以要加 static表示三个线程共享 ticket
    */
    int ticket = 0;

    @Override
    public void run() {
       //1. 循环
        while (true){
            //2. 同步代码块(同步方法)
             synchronized (MyRunnable.class){
                 if (extracted()) break;
             }
        }
    }

    private boolean extracted() {
        //3. 判断共享数据是否带了末尾,如果到了末尾
        if(ticket == 100){
            return true;
        }else{
            //4. 判断共享数据是否到了末尾,如果没有到末尾
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            ticket++;
            System.out.println(Thread.currentThread().getName()+"在卖第"+ticket+"张票");
        }
        return false;
    }


}
